package com.maxjay.component.metadata.model;

import com.maxjay.component.metadata.constant.FieldType;
import com.maxjay.component.metadata.core.generator.FieldValueGenerator;

/**
 * 实体属性
 * 
 * @author zhaixm
 *
 */
public interface EntityField {
	
	/**
	 * 字段ID
	 * 
	 * @return
	 */
	String getId();

	/**
	 * 取得字段名
	 * 
	 * @return
	 */
	String getName();

	/**
	 * 取得字段中文名
	 * 
	 * @return
	 */
	String getNameCn();
	
	/**
	 * 取得字段数据库类型
	 * 
	 * @return
	 */
	FieldType getFieldType();
	
	/**
	 * 是否主键
	 * 
	 * @return
	 */
	boolean isKey();
	
	/**
	 * 字段是否显示
	 * 
	 * @return
	 */
	boolean isDisplay();
	
	/**
	 * 字段是否可空
	 * 
	 * @return
	 */
	boolean isNullable();
	
	/**
	 * 是否虚拟字段
	 * 
	 * @return
	 */
	boolean isVirtual();
	
	/**
	 * 是否列表显示
	 * 
	 * @return
	 */
	boolean isListField();
	
	/**
	 * 是否查询条件
	 * 
	 * @return
	 */
	boolean isQueryField();
	
	/**
	 * 取得页面中的显示值
	 * 
	 * @param originalVal
	 * @return
	 */
	String convertDisplayValue(Record record);
	
	/**
	 * 取得数据库的存储值
	 * 
	 * @param originalVal
	 * @return
	 */
	Object convertStoreValue(Record record);
	
	/**
	 * 字段值生成器，当该字段值为空时调用该生成器生成默认值
	 * 
	 * @return
	 */
	FieldValueGenerator getValueGenerator();

}
